/** 
 * @description 按最大最小值来取精简数据
 * @param {Array} x 横坐标数据
 * @param {Array} y 纵数据 
 * @return {Object} 精简后的数据
 */
function extract(x,y,resLen=2000){
	if(resLen>=y.length){
		let interval=parseInt(y.length/5);
		return {x,y,interval}
	}
	let interval=parseInt(resLen/5);
	resLen=parseInt(resLen/2);
	let len=y.length;
	let splitNum=parseInt(len/resLen);
	let res={x:[],y:[],interval,min:null,max:null}
	//console.log('splitNum',splitNum,len/resLen);
	let k2,z,minArr=[],maxArr=[];
	let min,max,minIndex,maxIndex,tmpdata,xmin,xmax;
	for(let i=0;i<len;i+=splitNum){
		//let t=Date.now(),t2;
		tmpdata=y.slice(i,i+splitNum);
		//t2=Date.now()-t;if(t2>50)console.log('slice',t2);
		
		//t=Date.now();
		min=Math.min(...tmpdata);
		max=Math.max(...tmpdata);
		//t2=Date.now()-t;if(t2>50)console.log('最大最小',t2);
		//t=Date.now();
		minIndex=tmpdata.indexOf(min)+i;
		maxIndex=tmpdata.indexOf(max)+i;
		/* if(tmpdata.indexOf(min)==-1){
			console.log('传入extract',x.slice(0,10))
			console.log('最大最小索引 ',tmpdata.indexOf(min),tmpdata.indexOf(max),min,max,i)
		} */
		//t2=Date.now()-t;if(t2>50)console.log('最大最小位置',t2);
		minArr.push(min)
		maxArr.push(max)
		xmin=x[maxIndex] || '';
		xmax=x[maxIndex] || '';
		if(minIndex>maxIndex){
			res.x.push(xmax,xmin);
			res.y.push(max,min);
		}else{
			res.x.push(xmin,xmax);
			res.y.push(min,max);
		}
		//if(i==0)console.log('最大最小',x[maxIndex],x[minIndex],minIndex,maxIndex)
	}
	res.min=Math.min(...minArr);
	res.max=Math.max(...maxArr);
	return res;
}

/** 
 * @description 按间隔数来取精简数据,用于单个通道有多组数据展示时，展示效果上不如按最大最小值精简
 * @param {Array} x 横坐标数据
 * @param {Array[Array]} y 多组数据 如[[1,2,3],[1,2,3],...]
 * @return {Object} 精简后的数据
 */
function intervalExtract(x,y,resLen=2000){
	if(resLen>=y[0].length){
		let interval=parseInt(y[0].length/5);
		return {x,y,interval,min:null,max:null}
	}
	let interval=parseInt(resLen/5);
	let len=y[0].length;
	let len2=y.length;
	let splitNum=parseInt(len/resLen);
	let y2=[];
	y.forEach(v=>y2.push([]));
	let res={x:[],y:y2,interval,min:null,max:null};
	for(let i=0;i<len;i+=splitNum){
		res.x.push(x[i]);
		for(let k=0;k<len2;k++){
			res.y[k].push(y[k][i]);
		}
	}
	return res;
}

/**
 * @description 获取变量类型
 * @param {Object} data
 */
function varTypeof(data){
	let type=Object.prototype.toString.call(data);
	return type.replaceAll(/(\[object )|(\])/g,"").toLowerCase();
}

export {extract,intervalExtract,varTypeof}